'use strict';

// 1. 导入模块
const fs = require('fs');
const { sequelize } = require('../database');

// 2. 编写函数，筛选当前文件所在文件夹的绝对路径下以 .js 结尾的文件，且不是 index.js 文件
function searchModels() {
    // 获取当前文件所在文件夹的绝对路径下的所有文件
    let files = fs.readdirSync(__dirname);
    // 循环遍历所有文件，并过滤出以 .js 结尾的文件，且不是 index.js 文件
    let filterFiles = files.filter(item => {
        return item.endsWith('.js') && item !== 'index.html';
    });
    // 将筛选完的文件返回出去
    return filterFiles;
}

// 3. 引入所有模型到指定对象
function registerModels(filterFiles) {
    // 用于存放所有的模型
    let obj = {}
    // 循环遍历所有的模型，并将模型存放到 obj 对象中
    filterFiles.forEach(item => {
        // 获取模型的名字（去除后缀的）
        let key = item.substring(0, item.length - 3);
        // 将模型存放到 obj 对象中
        obj[key] = require(__dirname + '/' + item);
    });
    return obj;
}

// 4. 调用函数
let filterFiles = searchModels();
let obj = registerModels(filterFiles);

// 5. 给 obj 绑定 sync 方法
obj.sync = async (ctx, next) => {
    if (process.env === 'product') {
        console.log('当前是生产环境，不能强制修改或删除表');
    } else {
        return sequelize.sync({ force: true }); // force:true 创建表时，如果表存在，先删除，在重新创建
    }
}

// 6. 暴露出去
module.exports = obj;
